package com.asialjim.wechat.apiservice;

import org.apache.http.entity.ContentType;

/**
 * <h1><em>ASIAL JIM JAVA DOC</em></h1><hr/>
 * <h2>CLASS DESCRIPTION <i>[ NAME: com.asialjim.wechat.api.Api ]</i></h2><strong>
 * <p> tencent we-chat api
 * </strong><p><p><em>Copyright &copy; Asial Jim Co., LTD</em><hr/>
 *
 * @author Asial Jim &nbsp;&nbsp; <span>Email:<a href="mailto:asialjim@hotmail.com">asialjim@hotmail.com</a> &nbsp;&nbsp; <a href="asialjim@qq.com">asialjim@qq.com</a></span>
 * @version 1.0.0
 * @since 2021/3/1   &nbsp;&nbsp; JDK 8
 */
public interface Api {

    /**
     * <h3>METHOD DESCRIPTION <i>[ NAME: getUri ]</i></h3>
     * we-chat api uri without business domain and port
     * @return {@link String uri}
     * @author Asial Jim &nbsp;&nbsp;<span>Email:asialjim@hotmail.com &nbsp;&nbsp; asialjim@qq.com</span>
     * @since 2021/3/1 15:25
     */
    String getUri();

    /**
     * <h3>METHOD DESCRIPTION <i>[ NAME: getName ]</i></h3>
     * get api name
     * @return {@link String api name}
     * @author Asial Jim &nbsp;&nbsp;<span>Email:asialjim@hotmail.com &nbsp;&nbsp; asialjim@qq.com</span>
     * @since 2021/3/1 16:05
     */
    String getName();

    /**
     * <h3>METHOD DESCRIPTION <i>[ NAME: getHttpMethod ]</i></h3>
     * http method for we-chat api
     * @return {@link HttpMethod method}
     * @author Asial Jim &nbsp;&nbsp;<span>Email:asialjim@hotmail.com &nbsp;&nbsp; asialjim@qq.com</span>
     * @since 2021/3/1 15:26
     */
    HttpMethod getHttpMethod();

    /**
     * <h3>METHOD DESCRIPTION <i>[ NAME: getResponseContentType ]</i></h3>
     * the http api response content type
     * @return {@link ContentType content type}
     * @author Asial Jim &nbsp;&nbsp;<span>Email:asialjim@hotmail.com &nbsp;&nbsp; asialjim@qq.com</span>
     * @since 2021/3/1 15:26
     */
    ContentType  getResponseContentType();

    /**
     * <h3>METHOD DESCRIPTION <i>[ NAME: getUrlParamClass ]</i></h3>
     * the url param java class for we-chat api
     * @return {@link Class<? extends    ApiRequest.RequestUrlParam> url param class}
     * @author Asial Jim &nbsp;&nbsp;<span>Email:asialjim@hotmail.com &nbsp;&nbsp; asialjim@qq.com</span>
     * @since 2021/3/1 15:50
     */
    Class<? extends ApiRequest.RequestUrlParam> getUrlParamClass();

    /**
     * <h3>METHOD DESCRIPTION <i>[ NAME: getBodyParamClass ]</i></h3>
     * the body param java class for we-chat api
     * @return {@link Class<? extends   ApiRequest.RequestBodyParam> body apram}
     * @author Asial Jim &nbsp;&nbsp;<span>Email:asialjim@hotmail.com &nbsp;&nbsp; asialjim@qq.com</span>
     * @since 2021/3/1 15:51
     */
    Class<? extends ApiRequest.RequestBodyParam> getBodyParamClass();

    /**
     * <h3>METHOD DESCRIPTION <i>[ NAME: resultClass ]</i></h3>
     * api response java class
     * @return {@link Class response class}
     * @author Asial Jim &nbsp;&nbsp;<span>Email:asialjim@hotmail.com &nbsp;&nbsp; asialjim@qq.com</span>
     * @since 2021/3/1 17:27
     */
    Class<?> getResponseClass();
}